博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate+Freemarker分页控件实现
阅读量:2494 次
发布时间:2019-05-11

本文共 3791 字,大约阅读时间需要 12 分钟。

传到前端的Page

public class Page
implements Serializable { private static final long serialVersionUID = 1L; private List
contents; private int pageSize; private int totalSize; private int curPage; public Page(int curPage, int totalSize, int pageSize, List
contents) { this.curPage = curPage; this.totalSize = totalSize; this.pageSize = pageSize; this.contents = contents; } public List
getContents() { return contents; } public void setContents(List
contents) { this.contents = contents; } public int getTotalPages() { return totalSize / pageSize + 1; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getCurPage() { return curPage; } public void setCurPage(int curPage) { this.curPage = curPage; } public int getTotalSize() { return totalSize; } public void setTotalSize(int totalSize) { this.totalSize = totalSize; }}

后端实现

解析URL,得到第几页的数据,填充到model data中。

@Controllerpublic class ExampleController {    //例如http://localhost:8088/javaweb/example/page_3.html,    @RequestMapping(value = { "/example/page{pageNo}.html", "/example/page_{pageNo}.html" })    public String page(@PathVariable("pageNo") int pageNo, Map
map) { if (pageNo <= 0) pageNo = 1; FrontUtil.frontPageData(map, pageNo, "/javaweb/example/page_"); return "example/page"; }}

Freemarker自定义指令

public class ContentPageDirective implements TemplateDirectiveModel {
// private Version version = new Version("2.3.23"); private DefaultObjectWrapperBuilder defaultObjectWrapperBuilder = new DefaultObjectWrapperBuilder( new Version("2.3.23")); @Inject private ContentDao contentDao; @Override public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { // TODO Auto-generated method stub try { int pageNo = FrontUtil.getPageNo(env); Page
page = contentDao.getPage(pageNo); env.setVariable("page", defaultObjectWrapperBuilder.build().wrap(page)); if (body != null) { body.render(env.getOut()); } } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

前端实现

分页 <@cms_content_page>
    <#list page.contents as content>
  • ${content.title}
总共${page.totalSize}条记录 ${page.curPage}/${page.totalPages}页 <#assign href="/javaweb/example/page_"> 首页 <#if (page.curPage > 1) > 上一页 <#else> 上一页
<#if page.curPage < page.totalPages> 下一页 <#else> 下一页
尾页

Hibernate关键实现

public class PageableBaseDao
extends AbstractBaseDao
implements Pageable
{
@Override public Page
getPage(int curPage) throws ClientException { // TODO Auto-generated method stub if (curPage < 1) { throw new ClientException("page number should large than 0"); } int totalSize = getCount(); int pageSize = PageConstant.SIZE_PER_PAGE; Criteria criteria = getSession().createCriteria(entityClass); criteria.setFirstResult((curPage - 1) * pageSize); criteria.setMaxResults(pageSize); List contents = criteria.list(); return new Page
(curPage, totalSize, pageSize, contents); }}

截图

访问

这里写图片描述

你可能感兴趣的文章
关于nginx反代jenkins报错 反向代理设置有误
查看>>
关于Ubuntu中snap安装软件太慢解决办法
查看>>
esp8266 + dht11 + 两路继电器 实现pc远程控制开关机温度监控.并配置zabbix监控
查看>>
在linux中设置优先使用ipv4,而不是ipv6
查看>>
谷歌浏览器离线安装包下载
查看>>
正则表达式
查看>>
AWK命令使用
查看>>
Redis项目实战---应用及理论(三)---Jedis使用
查看>>
Redis项目实战--应用及理论(一)--redis基础
查看>>
Redis项目实战---应用及理论(二)---Redis集群原理
查看>>
VMware vSphere API开发(一)---vSphere 体系核心概念
查看>>
java String 的比较
查看>>
将String数字字符转为整型
查看>>
【转】 Java中equals和==的区别
查看>>
idea导入maven项目时需要注意
查看>>
nginx部署前端项目的一些配置【刚入门】
查看>>
java 日期格式化 将String日期重新格式化成String型【转】
查看>>
Linux下python安装升级详细步骤 | Python2 升级 Python3
查看>>
阿里云CentOS安装图形化界面
查看>>
SpringBoot nohup启动
查看>>